{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notes:\n",
    " * with local and secondary views for the 0.3 and 5.0 detrendings"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/extended_20_run_12/1/AstroCNNModel_extended_20201208_221622',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_12/2/AstroCNNModel_extended_20201208_224926',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_12/3/AstroCNNModel_extended_20201208_232207',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_12/4/AstroCNNModel_extended_20201208_235452',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_12/5/AstroCNNModel_extended_20201209_002749',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_12/6/AstroCNNModel_extended_20201209_010051',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_12/7/AstroCNNModel_extended_20201209_013349',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_12/8/AstroCNNModel_extended_20201209_020639',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_12/9/AstroCNNModel_extended_20201209_023952',\n",
       " '/mnt/tess/astronet/checkpoints/extended_20_run_12/10/AstroCNNModel_extended_20201209_031323']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/extended_20_run_12'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-20-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v4-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 2\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 3\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 4\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 5\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 6\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 7\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 8\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 9\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n",
      "Running model 10\n",
      "Binary prediction threshold: 0.2152499407880693 (orientative)\n",
      "1558 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('tic_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_E', 'disp_N', 'disp_J', 'disp_S', 'disp_B']\n",
    "\n",
    "col_e = labels.index('disp_E')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for tic_id in preds.index:\n",
    "        if tic_id not in agg_preds:\n",
    "            agg_preds[tic_id] = []\n",
    "\n",
    "        row = preds[preds.index == tic_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {tic_id}')\n",
    "        if pred_v[col_e] >= config.hparams.prediction_threshold:\n",
    "            agg_preds[tic_id].append('disp_E')\n",
    "        else:\n",
    "            agg_preds[tic_id].append(preds.columns[np.argmax(pred_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for tic_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[tic_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'tic_id': tic_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('tic_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0).set_index('tic_id')\n",
    "tce_labels = tce_table[labels]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='tic_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.9728260869565217\n",
      "Precision: 0.7103174603174603\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_E_p'] > 0)\n",
    "pos = (pl['disp_E'] > 0)\n",
    "\n",
    "pneg = (pl['disp_E_p'] == 0)\n",
    "neg = (pl['disp_E'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "118412801\n",
      "158159741\n",
      "384065528\n",
      "404220255\n",
      "104485403\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg][[]].join(tce_table, on='tic_id', how='left').index:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_E</th>\n",
       "      <th>disp_N</th>\n",
       "      <th>disp_J</th>\n",
       "      <th>disp_S</th>\n",
       "      <th>disp_B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.085303</td>\n",
       "      <td>0.091136</td>\n",
       "      <td>0.101202</td>\n",
       "      <td>0.009405</td>\n",
       "      <td>0.785877</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.058332</td>\n",
       "      <td>0.076687</td>\n",
       "      <td>0.209433</td>\n",
       "      <td>0.010174</td>\n",
       "      <td>0.806343</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.045303</td>\n",
       "      <td>0.126952</td>\n",
       "      <td>0.162440</td>\n",
       "      <td>0.009403</td>\n",
       "      <td>0.822946</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.084952</td>\n",
       "      <td>0.122400</td>\n",
       "      <td>0.104294</td>\n",
       "      <td>0.011238</td>\n",
       "      <td>0.830593</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.045922</td>\n",
       "      <td>0.094617</td>\n",
       "      <td>0.154797</td>\n",
       "      <td>0.007214</td>\n",
       "      <td>0.862427</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.029422</td>\n",
       "      <td>0.092362</td>\n",
       "      <td>0.146229</td>\n",
       "      <td>0.004520</td>\n",
       "      <td>0.900431</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.019906</td>\n",
       "      <td>0.111219</td>\n",
       "      <td>0.401947</td>\n",
       "      <td>0.004393</td>\n",
       "      <td>0.791521</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.074650</td>\n",
       "      <td>0.117039</td>\n",
       "      <td>0.120916</td>\n",
       "      <td>0.015123</td>\n",
       "      <td>0.829368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.127655</td>\n",
       "      <td>0.113472</td>\n",
       "      <td>0.158859</td>\n",
       "      <td>0.009927</td>\n",
       "      <td>0.558818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0.025708</td>\n",
       "      <td>0.063382</td>\n",
       "      <td>0.230765</td>\n",
       "      <td>0.005251</td>\n",
       "      <td>0.875331</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "             disp_E    disp_N    disp_J    disp_S    disp_B\n",
       "tic_id                                                     \n",
       "404220255  0.085303  0.091136  0.101202  0.009405  0.785877\n",
       "404220255  0.058332  0.076687  0.209433  0.010174  0.806343\n",
       "404220255  0.045303  0.126952  0.162440  0.009403  0.822946\n",
       "404220255  0.084952  0.122400  0.104294  0.011238  0.830593\n",
       "404220255  0.045922  0.094617  0.154797  0.007214  0.862427\n",
       "404220255  0.029422  0.092362  0.146229  0.004520  0.900431\n",
       "404220255  0.019906  0.111219  0.401947  0.004393  0.791521\n",
       "404220255  0.074650  0.117039  0.120916  0.015123  0.829368\n",
       "404220255  0.127655  0.113472  0.158859  0.009927  0.558818\n",
       "404220255  0.025708  0.063382  0.230765  0.005251  0.875331"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == 404220255)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_E_p</th>\n",
       "      <th>disp_N_p</th>\n",
       "      <th>disp_J_p</th>\n",
       "      <th>disp_S_p</th>\n",
       "      <th>disp_B_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_E</th>\n",
       "      <th>disp_N</th>\n",
       "      <th>disp_J</th>\n",
       "      <th>disp_S</th>\n",
       "      <th>disp_B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>tic_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>404220255</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>10</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           disp_E_p  disp_N_p  disp_J_p  disp_S_p  disp_B_p  maxcount  disp_E  \\\n",
       "tic_id                                                                          \n",
       "404220255         0         0         0         0        10        10       1   \n",
       "\n",
       "           disp_N  disp_J  disp_S  disp_B  \n",
       "tic_id                                     \n",
       "404220255       0       0       0       0  "
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == 404220255]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 65,
   "metadata": {},
   "outputs": [],
   "source": [
    "tics = set(ensemble_preds[0].index.values)\n",
    "\n",
    "tic_index = {v: i for i, v in enumerate(tics)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(tic_index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        tic, pred_e = row[0], row[1][col_e]\n",
    "        pred_es[i][tic_index[tic]] = pred_e\n",
    "\n",
    "lbl_es = np.zeros([len(tic_index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    tic, lbl_e = row[0], row[1]['disp_E']\n",
    "    if tic in tic_index:\n",
    "        lbl_es[tic_index[tic]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = float(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9731933208221224, max R: 1.0, max P: 1.0\n",
      "100% recall at: 58%, threshold: 0.06149874830251434\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    if p > 0:\n",
    "        ps.append(p)\n",
    "        rs.append(r)\n",
    "    else:\n",
    "        ps.append(1.0)\n",
    "        rs.append(0.0)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
